經過前兩天對 dotagent 和 ruler 的介紹,我們現在需要從技術角度深入比較這兩個 System Prompt 統一管理工具的核心差異。本文將聚焦於架構設計、功能特性和技術實現的對比分析,為後續的工具選擇奠定基礎。
dotagent 的模組化檔案架構:
.agent/
├── core-style.md
├── api-safety.md
└── frontend/
└── components.md
dotagent 採用統一的 .agent 目錄結構,每個 .md
檔案都支援 YAML frontmatter 提供基礎的元資料控制,支援巢狀資料夾組織。
ruler 的階層化目錄架構:
.ruler/
├── AGENTS.md # 主規則檔案
├── coding_style.md # 附加規則檔案
├── api_conventions.md # 專門化規則
└── ruler.toml # 統一配置檔案
ruler 採用簡潔的目錄結構,透過檔案名稱和巢狀目錄來表達規則關係,強調簡單直觀的管理方式。
dotagent 的基礎 YAML 控制:
---
id: core-style
title: Core Style Guidelines
alwaysApply: true
priority: high
scope: "src/**"
---
# 核心程式碼風格指南
## 開發規範
- 使用 TypeScript 進行開發
- 遵循 ESLint 規範
- 所有非同步函數都必須處理錯誤
ruler 的簡潔化配置:
# TypeScript 開發規範
## 程式碼風格
- 優先使用 `interface` 定義物件型別
- 使用 `type` 定義聯合型別或複雜型別運算
- 避免使用 `any`,必要時使用 `unknown`
## 測試要求
- 所有函數都必須有完整的 TypeScript 型別定義
- 使用 ESLint 和 Prettier 的推薦配置
# ruler.toml
default_agents = ["copilot", "claude", "aider"]
[agents.cursor]
enabled = true
output_path = ".cursor/rules/ruler_cursor_instructions.mdc"
[agents.claude]
enabled = true
output_path = "CLAUDE.md"
技術分析:
平台/工具 | dotagent 支援 | ruler 支援 |
---|---|---|
Claude Code | CLAUDE.md | CLAUDE.md |
VS Code Copilot | .github/copilot-instructions.md | .github/copilot-instructions.md |
Cursor | .cursor//*.mdc, .cursor//*.md | .cursor/rules/ruler_cursor_instructions.mdc |
Windsurf | .windsurfrules | .windsurf/rules/ruler_windsurf_instructions.md |
Cline | .clinerules 或 .clinerules/*.md | .clinerules |
Zed | .rules | AGENTS.md + .zed/settings.json |
Amazon Q Developer | .amazonq/rules/*.md | .amazonq/rules/ruler_q_rules.md |
Aider | CONVENTIONS.md | AGENTS.md + .aider.conf.yml |
其他平台 | 約 11 個平台 | 25+ 個平台(包含 Gemini CLI、Jules、Junie、AugmentCode、Kilo Code 等) |
功能領域 | dotagent | ruler | 技術實現差異 |
---|---|---|---|
YAML 前置資料 | 基礎元資料控制 | 純 Markdown | dotagent 支援 id、title、priority、scope 等基礎字段 |
檔案組織方式 | 單一目錄巢狀資料夾 | 單檔案拼接或多目錄 | dotagent 限於 .agent/ 下組織;ruler 支援純檔案拼接 |
跨目錄規則管理 | 不支援 | --nested 參數支援 | ruler 可載入專案中多個 .ruler/ 目錄的規則 |
私有規則管理 | .local.md、private/ 目錄 | 需手動管理 | dotagent 自動排除私有內容 |
回復機制 | 無內建回復 | ruler revert | ruler 提供安全實驗環境 |
MCP 伺服器管理 | 不支援 | 統一 MCP 配置 | ruler 獨有企業級功能 |
自動 .gitignore | 自動管理 | 自動管理 | 兩者都支援自動化管理 |
ruler 的跨目錄規則載入是其最重要的技術創新,這與 dotagent 的單目錄組織方式形成鮮明對比:
# ruler 支援的複雜專案結構
project/
├── .ruler/ # 全域專案規則
│ ├── AGENTS.md # 基礎開發規範
│ └── security-rules.md # 安全規範
├── src/
│ ├── api/
│ │ └── .ruler/ # API 層特定規則
│ │ └── api-conventions.md
│ └── frontend/
│ └── .ruler/ # 前端特定規則
│ └── react-standards.md
└── tests/
└── .ruler/ # 測試特定規則
└── testing-practices.md
技術實現機制:
# ruler 的巢狀載入演算法
ruler apply --nested --verbose
# 執行過程:
# 1. 掃描專案目錄樹,發現所有 .ruler/ 目錄
# 2. 按照目錄深度排序,深層目錄優先級較高
# 3. 合併所有規則檔案,添加來源標記
# 4. 生成最終的統一規則檔案
最終生成的統一規則檔案內容:
--- Source: .ruler/AGENTS.md ---
# 全域開發規範
- 使用 TypeScript 進行開發
- 遵循 ESLint 規範
--- Source: src/api/.ruler/api-conventions.md ---
# API 開發特定規範
- RESTful API 設計原則
- 使用 OpenAPI 規範
--- Source: tests/.ruler/testing-practices.md ---
# 測試開發規範
- 測試覆蓋率不低於 80%
- 使用 Jest 作為測試框架
dotagent 支援 .agent/ 目錄下的巢狀資料夾組織,但這只是單一目錄內的檔案組織,例如:
.agent/
├── core-style.md
├── frontend/
│ └── components.md
└── backend/
└── api-rules.md
關鍵技術差異:
多種私有規則標識方式:
<!-- 方式一:檔案名後綴 -->
<!-- my-preferences.local.md (自動排除) -->
---
id: my-preferences
---
# 我的個人偏好
- 使用 4 空格縮進
- 偏好箭頭函數
<!-- 方式二:private 目錄 -->
<!-- .agent/private/client-specific.md (自動排除) -->
---
id: client-rules
---
# 客戶特定需求
- 特殊的 API 金鑰管理
- 客製化錯誤處理
自動 .gitignore 管理:
# dotagent 自動生成的忽略規則
.agent/**/*.local.md
.agent/private/**
.github/copilot-instructions.local.md
.cursor/rules/**/*.local.mdc
.clinerules.local
.windsurfrules.local
.rules.local
CLAUDE.local.md
ruler 不提供專門的私有規則機制,需要手動管理:
# 手動將私有規則添加到 .gitignore
echo ".ruler/private-rules.md" >> .gitignore
# 或者使用分離的配置檔案
ruler apply --config ./team-config/ruler.toml # 團隊配置
ruler apply --config ./personal/ruler.toml # 個人配置
技術分析:
TOML 配置格式:
# ruler.toml 中的 MCP 設定
[mcp]
enabled = true
merge_strategy = "merge" # 或 "overwrite"
# 本地 stdio 伺服器
[mcp_servers.filesystem]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/project"]
[mcp_servers.filesystem.env]
API_KEY = "your-api-key"
# 遠端伺服器
[mcp_servers.search]
url = "https://mcp.example.com"
[mcp_servers.search.headers]
Authorization = "Bearer your-token"
支援的 MCP 配置檔案:
.mcp.json
.vscode/mcp.json
.cursor/mcp.json
.amazonq/mcp.json
dotagent 目前不支援 MCP 伺服器的統一管理,這是其與 ruler 的重要差異之一。如需 MCP 功能,需要手動為每個平台分別配置。
透過深入的技術對比分析,我們可以清楚看到兩個工具的核心差異:
dotagent 的技術特色:
ruler 的技術特色: